package odv.view;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.List;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.WindowConstants;
import javax.swing.border.TitledBorder;

import odv.rmi.ClienteOdvRMI;

import bean.vo.FabricanteVO;
import bean.vo.ItemListaPreciosVO;
import bean.vo.PaisVO;
import bean.vo.ProductoVO;
import bean.vo.RodamientoVO;
import java.awt.Font;

@SuppressWarnings("serial")
public class ConsultaDePrecios extends javax.swing.JFrame implements ActionListener {

	private JPanel jPanel1;

	private JButton btnCancelar;
	private JButton btnConsultar;
	private EntityComboBox<String> cmbCodigo;
	private EntityComboBox<String> cmbSufijo;
	private EntityComboBox<PaisVO> cmbOrigen;
	private EntityComboBox<FabricanteVO> cmbMarca;
	
	private String codigoNoSeleccionado = "Todos...";
	private String sufijoNoSeleccionado = "Todos...";
	private String sinSufijo = "Sin sufijo";
	private FabricanteVO fabricanteNoSeleccionado = new FabricanteVO();
	private PaisVO paisNoSeleccionado = new PaisVO();
	
	public ConsultaDePrecios() {
		super();
		initGUI();
	}
	
	private void initGUI() {
		try {
			setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
			this.setTitle("Comparativa de precios");
			getContentPane().setLayout(null);
			this.setPreferredSize(new java.awt.Dimension(300, 250));

			jPanel1 = new JPanel();
			getContentPane().add(jPanel1);
			jPanel1.setBounds(12, 11, 270, 153);
			jPanel1.setLayout(null);
			jPanel1.setBorder(BorderFactory.createTitledBorder(null, "Parametros de la consulta", TitledBorder.LEADING, TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma",1,11), new java.awt.Color(0,0,255)));
			
			JLabel lblNewLabel_3 = new JLabel("Codigo");
			lblNewLabel_3.setBounds(10, 26, 40, 14);
			jPanel1.add(lblNewLabel_3);
			
			JLabel lblNewLabel_2 = new JLabel("Sufijo:");
			lblNewLabel_2.setBounds(10, 56, 40, 14);
			jPanel1.add(lblNewLabel_2);
			
			JLabel lblNewLabel_4 = new JLabel("Origen");
			lblNewLabel_4.setBounds(10, 86, 40, 14);
			jPanel1.add(lblNewLabel_4);
			
			JLabel lblMarca = new JLabel("Marca:");
			lblMarca.setBounds(10, 116, 46, 14);
			jPanel1.add(lblMarca);
			
			cmbCodigo = new EntityComboBox<String>();
			cmbCodigo.setBounds(60, 23, 200, 20);
			jPanel1.add(cmbCodigo);
			
			cmbSufijo = new EntityComboBox<String>();
			cmbSufijo.setBounds(60, 53, 200, 20);
			jPanel1.add(cmbSufijo);
			
			cmbOrigen = new EntityComboBox<PaisVO>();
			cmbOrigen.setBounds(60, 83, 200, 20);
			jPanel1.add(cmbOrigen);
			
			cmbMarca = new EntityComboBox<FabricanteVO>();
			cmbMarca.setBounds(60, 113, 200, 20);
			jPanel1.add(cmbMarca);
			
			btnCancelar = new JButton();
			getContentPane().add(btnCancelar);
			btnCancelar.setText("Cancelar");
			btnCancelar.setBounds(160, 175, 91, 30);
			btnCancelar.setFont(new java.awt.Font("Tahoma",1,11));
			btnCancelar.addActionListener(this);
			
			btnConsultar = new JButton();
			btnConsultar.setText("Consultar");
			btnConsultar.setFont(new Font("Tahoma", Font.BOLD, 11));
			btnConsultar.setBounds(39, 175, 91, 30);
			getContentPane().add(btnConsultar);
			btnConsultar.addActionListener(this);

			fabricanteNoSeleccionado.setNombre("Todos...");
			paisNoSeleccionado.setNombre("Todos...");
			
			List<RodamientoVO> rodamientos = ClienteOdvRMI.getInstance().getIRemota().getRodamientos();
			List<String> codigos = new ArrayList<String>();
			List<String> sufijos = new ArrayList<String>();
			for (RodamientoVO rodamiento : rodamientos) {
				if (!codigos.contains(rodamiento.getCodigo())) {
					codigos.add(rodamiento.getCodigo());
				}
				
				if (!sufijos.contains(rodamiento.getSufijo()) && !rodamiento.getSufijo().equals("")) {
					sufijos.add(rodamiento.getSufijo());
				}
			}
			
			codigos.add(0,codigoNoSeleccionado);
			sufijos.add(0, sinSufijo);
			sufijos.add(0, sufijoNoSeleccionado);
			
			List<FabricanteVO> fabricantes = ClienteOdvRMI.getInstance().getIRemota().getFabricantes();
			fabricantes.add(0, fabricanteNoSeleccionado);
			
			List<PaisVO> paises = ClienteOdvRMI.getInstance().getIRemota().getPaises();
			paises.add(0, paisNoSeleccionado);
			
			cmbCodigo.setItems(codigos);
			cmbSufijo.setItems(sufijos);
			cmbOrigen.setItems(paises);
			cmbMarca.setItems(fabricantes);
			
			pack();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	@Override
	public void actionPerformed(ActionEvent arg0) {
		if (arg0.getSource() == btnConsultar){
			
			ProductoVO producto = new ProductoVO();
			producto.setRodamiento(new RodamientoVO());
			
			String codigo = cmbCodigo.getSelectedItem();
			String sufijo = cmbSufijo.getSelectedItem();
			PaisVO origen = cmbOrigen.getSelectedItem();
			FabricanteVO fabricante = cmbMarca.getSelectedItem();
			
			if (codigo != codigoNoSeleccionado) {
				producto.getRodamiento().setCodigo(codigo);
			}
			
			if (sufijo != sufijoNoSeleccionado && sufijo != sinSufijo) {
				producto.getRodamiento().setSufijo(sufijo);
			} else if (sufijo == sinSufijo) {
				producto.getRodamiento().setSufijo("");
			}
			
			if (origen != paisNoSeleccionado) {
				producto.setOrigen(origen);
			}
			
			if (fabricante != fabricanteNoSeleccionado) {
				producto.setFabricante(fabricante);
			}
			
			try {
				List<ItemListaPreciosVO> items = ClienteOdvRMI.getInstance().getIRemota().consultarPrecios(producto);
				
				ListarPrecios listaPreciosFrame = new ListarPrecios(items);
				listaPreciosFrame.setVisible(true);
				listaPreciosFrame.setLocationRelativeTo(this);
			
			} catch (RemoteException e) {
				String message = e.getMessage();
				int index = message.indexOf("java.rmi.RemoteException: ");
				message = message.substring(index + 26, message.length());
				JOptionPane.showMessageDialog(this, message, "Error", JOptionPane.ERROR_MESSAGE);
			}

		} else if (arg0.getSource() == btnCancelar) {
			dispose();
		}
	}
}
